package com.zmc.lostfound.search.vo;

import com.zmc.lostfound.common.valid.ValueIntList;
import com.zmc.lostfound.common.valid.ValueStringList;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

import static com.zmc.lostfound.common.constant.ElasticSearchConstant.ASC;
import static com.zmc.lostfound.common.constant.ElasticSearchConstant.DESC;

/**
 * @author zmc
 * @description 帖子搜索参数请求体
 */
@Data
@ApiModel("帖子搜索参数请求体")
public class PostSearchVO implements Serializable {

    private static final long serialVersionUID = -330941914665227506L;

    /**
     * 全文检索关键字
     */
    @ApiModelProperty("全文检索关键字")
    private String keyword;

    /**
     * 帖子ids
     */
    @ApiModelProperty("帖子ids")
    private List<Long> postIds;

    /**
     * 寻物/认领帖(0:寻物，1:认领)
     */
    @ApiModelProperty("寻物/认领帖(0:寻物，1:认领)")
    @ValueIntList(values = {0, 1}, message = "帖子类型只能为0或1(0:寻物，1:认领)")
    private Integer type;

    /**
     * 物品类型id
     */
    @ApiModelProperty("物品类型id")
    @Min(value = 1, message = "物品类型id必须大于或等于1")
    private Long itemTypeId;

    /**
     * 完成状态(0:未完成，1:已完成)
     */
    @ApiModelProperty("完成状态(0:未完成，1:已完成)")
    @ValueIntList(values = {0, 1}, message = "帖子完成状态只能为0或1(0:未完成，1:已完成)")
    private Integer completeStatus;

    /**
     * 审核状态(0:未审核，1:未通过，2:已通过)
     */
    @ApiModelProperty("审核状态(0:未审核，1:未通过，2:已通过)")
    @ValueIntList(values = {0, 1, 2}, message = "帖子审核状态只能为0或1或2(0:未审核，1:未通过，2:已通过)")
    private Integer reviewStatus;

    /**
     * 发帖用户id
     */
    @ApiModelProperty("发帖用户id")
    @Min(value = 1, message = "发帖用户id必须大于或等于1")
    private Long fromUserId;

    /**
     * 完成用户id(寻物/认领人)
     */
    @ApiModelProperty("完成用户id(寻物/认领人)")
    @Min(value = 1, message = "完成用户id(寻物/认领人)必须大于或等于1")
    private Long toUserId;

    /**
     * 按id排序(asc:升序，desc:降序)
     */
    @ApiModelProperty("按id排序(asc:升序，desc:降序)")
    @ValueStringList(values = {ASC, DESC}, message = "排序字段只能为asc或desc")
    private String sortByPostId;

    /**
     * 按帖子发布时间排序(asc:升序，desc:降序)
     */
    @ApiModelProperty("按帖子发布时间排序(asc:升序，desc:降序)")
    @ValueStringList(values = {ASC, DESC}, message = "排序字段只能为asc或desc")
    private String sortByGmtCreate;

    /**
     * 当前页码
     */
    @ApiModelProperty("当前页码")
    @NotNull(message = "当前页码不能为null")
    @Min(value = 1, message = "当前页码必须大于或等于1")
    private Integer pageNo;

    /**
     * 页面大小
     */
    @ApiModelProperty("页面大小")
    @NotNull(message = "页面大小不能为null")
    @Min(value = 3, message = "页面大小必须大于或等于3")
    @Max(value = 100, message = "页面大小必须小于或等于100")
    private Integer pageSize;

}
